2020年のパーフェクトPHP Part2
この記事は2020年のパーフェクトPHPとして「パーフェクトPHP」のPart 2 PHP 〜 overviewの内容を補足しています。
未検証の内容を含み、正確ではない内容を含むことを承知ください。
2章 PHPの基本
この章の内容は2020年現在でもあまり変わっておらず大筋において信頼できます
このあと原書のミスについて細かく指摘する箇所もありますが実用的な問題はないので気にしないでも構いません
2.1 基本的な構文
2.1.5 出力
細部のミスですが「print文」は「print式」が正しいです
これは2010年当時からそうです
echoとprintの違い - Qiita と PHPの文と式 - Qiita に書きました
2.1.8 予約語
PHPはバージョンを追うごとに予約語が増えています
PHP 5.4で追加された yield, trait, insteadof
PHP 5.5で追加された finally
PHP 7.4で追加されたfn
最新の予約語は PHPマニュアル: キーワードのリストを参照ください
PHP 7.0.0 以降は、これらのキーワードを プロパティや定数の名前として使えるようになりました。 また、クラスやインターフェイスそしてトレイトのメソッド名としても使えるようになりました。 しかし、class だけは例外で、これを定数名として使うことはできません。
原書の2010年当時はできませんでした
そのほか型名(int, stringなど)もPHPマニュアル: その他の予約語の一覧としてまとめられています
キーワードおよび予約語(型名)はクラス名および名前空間の一部として利用できません
\Hoge\Int\Valueという名前は付けられないということです
PHP 8.0では可能になります → PHP RFC: Treat namespaced names as single token
2.1.9 エラー
ややこしいのですが、PHP7ではErrorというクラスが追加されました
ここで紹介するエラーと似ていますが別物です
詳細については必要に合せて後で詳述します
error_reporting(E_ALL | E_STRICT);
これはPHP 5.3で全てのエラーを捕捉する方法でした
PHP 5.4以降は error_reporting(E_ALL);と書けば十分です
2.2 変数
2.2.4 定義済み変数
$HTTP_RAW_POST_DATAはPHP 5.6で非推奨、PHP 7.0で削除されました
$data = file_get_contents('php://input');で置き換えられます
2.3 定数
2.3.1 定数定義
定数定義可能な値は、スカラー値(整数、浮動小数点数、文字列)のみで、配列はオブジェクト型は定数として定義することはできません。
PHP 5.6では constが定数式がサポートし、配列も定義できるようになりました
https://www.php.net/manual/ja/migration56.new-features.php#migration56.new-features.const-scalar-exprs
constでの定数定義時に静的な式が書けるようになり、ほかの定数も利用できます。
code:php
const SEC = 1;
const MIN = 60 * SEC;
const HOUR = 60 * MIN;
PHP 7.0では define() 関数で配列も定義できるようになりました
https://www.php.net/manual/ja/migration70.new-features.php#migration70.new-features.define-array
2.3.3 定義済み定数
マジック定数はPHPマニュアルの日本語訳ではマジカル定数と表現されることもあります
どちらが正しいということはなく、意味は同じです
PHP 5.5では新しいマジック定数として::classが追加されました
これはクラスの名前空間付きクラス名(FQSENではない)を返すマジック定数です
use MyApp\Entity\Bookというインポートがあったとき、同じコード内でBook::classと書くと"MyApp\Entity\Book"という文字列に展開されます
2.4 エラー
WIP...